package cn.qy.kotlin.base.ch10

/**
 * PlayerCh10 用于 ch10 章节
 */
class Player {
    // 默认情况下，属性的 getter 和 setter 方法的可见性与属性一致。所以，如果属性是 public，那么它的 getter 和 setter 方法也 是 public 的。
    var name = "madrigal"
        // field 用来存储属性数据。你不能直接定义 field，Kotlin 会封装 field，保护它里面的数据
        // 某个属性的 getter 和 setter 方法的可见性不能比该属性自身的可见性更宽松。你可以通过 getter 或 setter 方法来限制属性的访问，但它们不是用来让属性更加暴露的。
        get() {
            return field.capitalize()
        }
        // 只有可变属性才会有 setter 方法
        set(value) {
            field = value.trim()
        }

    var healthPoints = 89
    val isBlessed = true
    private val isImmortal = false

    fun auraColor(): String {
        val auraVisible = isBlessed && healthPoints > 50 || isImmortal
        return if (auraVisible) "GREEN" else "NONE"
    }

    fun formatHealthStatus() =
        when (healthPoints) {
            100 -> "is in excellent condition!"
            in 90..99 -> "has a few scratches."
            in 75..89 -> if (isBlessed) {
                "has some minor wounds, but is healing quite quickly!"
            } else {
                "has some minor wounds."
            }
            in 15..74 -> "looks pretty hurt."
            else -> "is in awful condition!"
        }

    fun castFireball(numFireballs: Int = 2) = println("A glass of Fireball springs into existence. (x$numFireballs)")
}